#include <head.h>

int main(int argc, char *argv[])
{
    if (2 != argc)
    {
        printf("格式错误 : %s file\n", argv[0]);
        return 0;
    }
    struct stat st;
    stat (argv[1], &st);

//文件类型
 // 文件类型   ls
    switch (st.st_mode & S_IFMT)
    {
        case S_IFREG:
            printf("-");
            break;
        case S_IFDIR:
            printf("d");
            break;
        case S_IFCHR:
            printf("c");
            break;
        case S_IFBLK:
            printf("b");
            break;
    default:
        break;
    }

    // 文件权限
    printf((st.st_mode & S_IRUSR) ? "r" : "-");  //  用户权限
    printf((st.st_mode & S_IWUSR) ? "w" : "-");  //  用户权限
    printf((st.st_mode & S_IXUSR) ? "x" : "-");  //  用户权限
    printf((st.st_mode & S_IRGRP) ? "r" : "-");  //  用于组
    printf((st.st_mode & S_IWGRP) ? "w" : "-");  //  用于组
    printf((st.st_mode & S_IXGRP) ? "x" : "-");  //  用于组
    printf((st.st_mode & S_IROTH) ? "r" : "-");  //  其他用户
    printf((st.st_mode & S_IWOTH) ? "w" : "-");  //  其他用户
    printf((st.st_mode & S_IXOTH) ? "x" : "-");  //  其他用户


    printf(" %ld", st.st_nlink);
    struct passwd * u_name = getpwuid(st.st_uid);
    printf(" %s", u_name->pw_name);
    struct passwd * g_name = getpwuid(st.st_gid);
    printf(" %s ", g_name->pw_name);
    printf(" %ld ", st.st_size);
    struct tm * tm1= localtime(&st.st_mtime);
    printf(" %d月  %d %d:%d",tm1->tm_mon+1,tm1->tm_mday,tm1->tm_hour,tm1->tm_min );
    printf(" %s\n", argv[1]);

    return 0;
}